// https : // iai.sh.cn/problem/924
// 未完成。需调试
#include <bits/stdc++.h>
using namespace std;
const int M = 3e5 + 3;
using LL = long long;
int s[M];
int temp[M];
int n;

int merge(int L, int m, int R) {
  int res = 0;
  int i = L;
  int j = m + 1;
  int k = L - 1;  // 修改：初始化 k 为 L - 1
  while (i <= m && j <= R) {
    if (s[i] <= s[j])  // 修改：使用 <= 而不是 <
      temp[++k] = s[i++];
    else
      temp[++k] = s[j++], res += (m - i + 1);  // 修改：计算逆序对数量
  }
  while (i <= m)
    temp[++k] = s[i++];  // 修改：使用 i++ 而不是 i
  while (j <= R)
    temp[++k] = s[j++];  // 修改：使用 j++ 而不是 j
  copy(temp + L, temp + R + 1, s + L);  // 修改：复制正确范围的元素
  return res;
}
// 分治法求逆序对
int sort(int L, int R) {
  if (L >= R)
    return 0;
  int m = (L + R) / 2;
  int ansL = sort(L, m);
  int ansR = sort(m + 1, R);
  int ansC = merge(L, m, R);
  return ansC + ansL + ansR;
}

int main() {
  string str;
  cin >> str;
  n = str.size();
  int sum = 0;
  for (int i = 0; i < n; i++) {
    if (str[i] == '1') sum++;
    s[i + 1] = sum;
  }
  cout << sort(1, n);
  return 0;
}
